package com.sinaapp.mspring.mapper;

import java.io.Serializable;
import java.util.List;

import com.sinaapp.mspring.model.vo.PageParameter;

/**
 * 通用DAO
 * @author binchao
 * 2016年3月1日
 * @param <T>
 */
public interface BaseMapper<T, ID extends Serializable> {

//////////////////////////////////////////////////////////////////////////////////////////////////////	
	/**
	 * 根据主键删除
	 * @param ids
	 * @return
	 */
	int deleteByPrimaryKey(ID id);

//////////////////////////////////////////////////////////////////////////////////////////////////////
	/**
	 * 保存记录
	 * @param record
	 * @return
	 */
    int insert(T record);

    /**
     * 保存记录（仅保存不为空的字段）
     * @param record
     * @return
     */
    int insertSelective(T record);

/////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 根据主键查询记录
     * @param id
     * @return
     */
    T selectByPrimaryKey(ID id);
    
    /**
     * 查询所有记录
     * @return
     */
    List<T> selectAll();
    
    
    /**
     * 统计记录数
     * @return
     */
    Integer count();
    
    /**
     * 分页
     * @param pageParameter
     * @return
     */
    List<T> selectList(PageParameter pageParameter);
    
/////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * 更新记录（仅更新属性不为空的字段）
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(T record);

    /**
     * 更新记录
     * @param record
     * @return
     */
    int updateByPrimaryKey(T record);
    
    /**
     * 更新记录
     * @param record
     * @return
     */
    int updateByPrimaryKeyWithBLOBs(T record);
    
}
